package main

import "fmt"

func main() {
	//证明数组赋值时，发生了拷贝
	var arr1 = [3]int{1, 2, 3}
	arr2 := arr1

	arr2[0] = 100

	fmt.Println(arr1) // [1 2 3]
	fmt.Println(arr2) // [100 2 3]

	//通过 new 关键字创建的指向数组的指针，分配在堆上,返回是指针
	var arr3 = new([3]int)
	arr3[0] = 1
	fmt.Println(arr3)  // 输出: &[1 0 0 0 0]
	fmt.Println(*arr3) // 输出: [1 0 0 0 0]

	//arr4和arr3指向同一个数组
	arr4 := arr3
	//修改arr4数组，也是在修改arr3
	arr4[0] = 111
	//arr3[1] = 222
	fmt.Println(*arr3) // 输出: [111 0 0 0 0]
	fmt.Println(*arr4) // 输出: [111 0 0 0 0]
}
